// src/utils/request-local.js - 专门用于本地开发环境的请求配置
import axios from 'axios'
import { Message } from 'element-ui'
import router from '@/router'

const service = axios.create({
    // 本地开发环境配置 - 使用相对路径，让Vue代理处理
    baseURL: 'http://localhost:8080',
    timeout: 5000000
})

// 请求拦截器
service.interceptors.request.use(config => {
    const token = localStorage.getItem('token')
    if (token) {
        config.headers['token'] = token
    }

    // 设置 Content-Type
    if (!config.headers['Content-Type']) {
        config.headers['Content-Type'] = 'application/json';
    }

    // 禁用缓存
    config.headers['Cache-Control'] = 'no-cache';

    // 对 PUT 和 DELETE 请求的数据处理
    if ((config.method === 'put' || config.method === 'delete') && config.data) {
        // 添加日志查看数据
        console.log('PUT/DELETE 请求原始数据:', config.data);
        
        // 如果数据已经是字符串，就不要再次序列化
        if (typeof config.data !== 'string') {
            config.data = JSON.stringify(config.data);
        }
        
        console.log('PUT/DELETE 请求处理后数据:', config.data);
    }

    return config
})

// 响应拦截器
service.interceptors.response.use(
    response => {
        console.log("axios response:", response)
        // 如果状态码是 200 或 201，返回数据
        if (response.status === 200 || response.status === 201) {
            return response.data;
        } else {
            // 否则，返回一个错误 Promise
            return Promise.reject(new Error(response.data?.msg || `请求失败, 状态码: ${response.status}`));
        }
    },
    error => {
        // 错误处理
        console.error("axios error:", error);
        let message = '请求失败';
        
        if (error.response) {
            // 错误来自服务器
            const status = error.response.status;
            message = error.response.data?.msg || `请求失败: 状态码 ${status}`;
            
            // 如果是401未授权，清除token并跳转到登录页面
            if (status === 401) {
                localStorage.removeItem('token');
                Message.error('登录已过期，请重新登录');
                router.push({
                    path: '/login',
                    query: { redirect: router.currentRoute.fullPath }
                });
                return Promise.reject(error);
            }
        } else if (error.message) {
            message = error.message;
        }
        
        Message.error(message); // 使用 Element UI 的 Message 显示错误消息
        return Promise.reject(error);
    }
)

export default service
